"""
Python中的with语句

异常处理：
    try...except...finally

上下文管理器协议：
    1.__enter__
    2.__exit__
"""


def handle_except():
    """
    处理异常
    """

    try:
        print("执行代码")
        raise ValueError
    except ValueError as e:
        print("ValueError")
    else:
        print("其他异常")
    finally:
        print("始终会执行的代码")
    # 输出结果：
    """
    执行代码
    ValueError
    始终会执行的代码
    """


class Sample:
    def do_something(self):
        print("执行代码")

    def __enter__(self):
        print("获取资源")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("释放资源")


def handle_except_by_with():
    """
    使用with语句简化异常处理
    """

    with Sample() as s:
        s.do_something()
    # 输出结果：
    """
    获取资源
    执行代码
    释放资源
    """


if __name__ == '__main__':
    handle_except()
    handle_except_by_with()
